home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 2000 April: Mac OS SDK / Dev.CD Apr 00 SDK1.toast / Development Kits / Mac OS / Security SDK / Includes / Keychain.p < prev    next >
Encoding:
Text File  |  1999-10-28  |  17.1 KB  |  450 lines  |  [TEXT/CWIE]

  1. {
  2.      File:        Keychain.p
  3.  
  4.      Contains:    Apple Keychain Manager Pascal interfaces.
  5.  
  6.      Version:    2.0
  7.  
  8.      Copyright:    © 1998-1999 by Apple Computer, Inc., all rights reserved
  9.  
  10.      Bugs?:        Please include the the file and version information (from above) with
  11.                  the problem description.  Developers belonging to one of the Apple
  12.                  developer programs can submit bug reports to:
  13.  
  14.                      devsupport@apple.com
  15.  
  16. }
  17. { Data structures and types }
  18. {$IFC UNDEFINED UsingIncludes}
  19. {$SETC UsingIncludes := 0}
  20. {$ENDC}
  21.  
  22. {$IFC NOT UsingIncludes}
  23.  UNIT Keychain;
  24.  INTERFACE
  25. {$ENDC}
  26.  
  27. {$IFC UNDEFINED __KEYCHAIN__}
  28. {$SETC __KEYCHAIN__ := 1}
  29.  
  30. {$I+}
  31. {$SETC KeychainIncludes := UsingIncludes}
  32. {$SETC UsingIncludes := 1}
  33.  
  34. {$IFC UNDEFINED __MACTYPES__}
  35. {$I MacTypes.p}
  36. {$ENDC}
  37. {$IFC UNDEFINED __FILES__}
  38. {$I Files.p}
  39. {$ENDC}
  40. {$IFC UNDEFINED __PROCESSES__}
  41. {$I Processes.p}
  42. {$ENDC}
  43. {$IFC UNDEFINED __ALIASES__}
  44. {$I Aliases.p}
  45. {$ENDC}
  46. {$IFC UNDEFINED __CODEFRAGMENTS__}
  47. {$I CodeFragments.p}
  48. {$ENDC}
  49. {$IFC UNDEFINED __ERRORS__}
  50. {$I Errors.p}
  51. {$ENDC}
  52. {$IFC UNDEFINED __DATETIMEUTILS__}
  53. {$I DateTimeUtils.p}
  54. {$ENDC}
  55. {$IFC UNDEFINED __CFSTRING__}
  56. {$I CFString.p}
  57. {$ENDC}
  58. {$IFC UNDEFINED __CFARRAY__}
  59. {$I CFArray.p}
  60. {$ENDC}
  61. {$IFC UNDEFINED __CFDATE__}
  62. {$I CFDate.p}
  63. {$ENDC}
  64.  
  65.  
  66. {$PUSH}
  67. {$ALIGN MAC68K}
  68. {$LibExport+}
  69.  
  70.  
  71. TYPE
  72.     KCRef = ^LONGINT; { an opaque 32-bit type }
  73.     KCItemRef = ^LONGINT; { an opaque 32-bit type }
  74.     KCSearchRef = ^LONGINT; { an opaque 32-bit type }
  75.     SecOIDRef                            = CFDataRef;
  76.  
  77. CONST
  78.     kIdleKCEvent                = 0;                            {  null event  }
  79.     kLockKCEvent                = 1;                            {  a keychain was locked  }
  80.     kUnlockKCEvent                = 2;                            {  a keychain was unlocked  }
  81.     kAddKCEvent                    = 3;                            {  an item was added to a keychain  }
  82.     kDeleteKCEvent                = 4;                            {  an item was deleted from a keychain  }
  83.     kUpdateKCEvent                = 5;                            {  an item was updated  }
  84.     kChangeIdentityKCEvent        = 6;                            {  the keychain identity was changed  }
  85.     kFindKCEvent                = 7;                            {  an item was found  }
  86.     kSystemKCEvent                = 8;                            {  the keychain client can process events  }
  87.     kDefaultChangedKCEvent        = 9;                            {  the default keychain was changed  }
  88.     kDataAccessKCEvent            = 10;                            {  a process has accessed a keychain item's data  }
  89.  
  90.  
  91. TYPE
  92.     KCEvent                                = UInt16;
  93.  
  94. CONST
  95.     kIdleKCEventMask            = $01;
  96.     kLockKCEventMask            = $02;
  97.     kUnlockKCEventMask            = $04;
  98.     kAddKCEventMask                = $08;
  99.     kDeleteKCEventMask            = $10;
  100.     kUpdateKCEventMask            = $20;
  101.     kChangeIdentityKCEventMask    = $40;
  102.     kFindKCEventMask            = $80;
  103.     kSystemEventKCEventMask        = $0100;
  104.     kDefaultChangedKCEventMask    = $0200;
  105.     kDataAccessKCEventMask        = $0400;
  106.     kEveryKCEventMask            = $FFFF;                        {  all of the above }
  107.  
  108.  
  109. TYPE
  110.     KCEventMask                            = UInt16;
  111.     AFPServerSignature                    = PACKED ARRAY [0..15] OF UInt8;
  112.     KCPublicKeyHash                        = PACKED ARRAY [0..19] OF UInt8;
  113.     KCAttrType                            = OSType;
  114.     KCCallbackInfoPtr = ^KCCallbackInfo;
  115.     KCCallbackInfo = RECORD
  116.         version:                UInt32;
  117.         item:                    KCItemRef;
  118.         processID:                ProcessSerialNumber;
  119.         event:                    EventRecord;
  120.         keychain:                KCRef;
  121.     END;
  122.  
  123.  
  124. CONST
  125.     kUnlockStateKCStatus        = 1;
  126.     kRdPermKCStatus                = 2;
  127.     kWrPermKCStatus                = 4;
  128.  
  129.  
  130. TYPE
  131.     KCStatus                            = UInt32;
  132.  
  133. CONST
  134.     kCertificateKCItemClass        = 'cert';                        {  Certificate  }
  135.     kAppleSharePasswordKCItemClass = 'ashp';                    {  Appleshare password  }
  136.     kInternetPasswordKCItemClass = 'inet';                        {  Internet password  }
  137.     kGenericPasswordKCItemClass    = 'genp';                        {  Generic password  }
  138.  
  139.  
  140. TYPE
  141.     KCItemClass                            = FourCharCode;
  142.  
  143. CONST
  144.                                                                 {  Common attributes  }
  145.     kClassKCItemAttr            = 'clas';                        {  Item class (KCItemClass)  }
  146.     kCreationDateKCItemAttr        = 'cdat';                        {  Date the item was created (UInt32)  }
  147.     kModDateKCItemAttr            = 'mdat';                        {  Last time the item was updated (UInt32)  }
  148.     kDescriptionKCItemAttr        = 'desc';                        {  User-visible description string (string)  }
  149.     kCommentKCItemAttr            = 'icmt';                        {  User's comment about the item (string)  }
  150.     kCreatorKCItemAttr            = 'crtr';                        {  Item's creator (OSType)  }
  151.     kTypeKCItemAttr                = 'type';                        {  Item's type (OSType)  }
  152.     kScriptCodeKCItemAttr        = 'scrp';                        {  Script code for all strings (ScriptCode)  }
  153.     kLabelKCItemAttr            = 'labl';                        {  Item label (string)  }
  154.     kInvisibleKCItemAttr        = 'invi';                        {  Invisible (boolean)  }
  155.     kNegativeKCItemAttr            = 'nega';                        {  Negative (boolean)  }
  156.     kCustomIconKCItemAttr        = 'cusi';                        {  Custom icon (boolean)  }
  157.                                                                 {  Unique Generic password attributes  }
  158.     kAccountKCItemAttr            = 'acct';                        {  User account (Str63) - also applies to Appleshare and Generic  }
  159.     kServiceKCItemAttr            = 'svce';                        {  Service (Str63)  }
  160.     kGenericKCItemAttr            = 'gena';                        {  User-defined attribute (untyped bytes)  }
  161.                                                                 {  Unique Internet password attributes  }
  162.     kSecurityDomainKCItemAttr    = 'sdmn';                        {  Security domain (Str63)  }
  163.     kServerKCItemAttr            = 'srvr';                        {  Server's domain name or IP address (string)  }
  164.     kAuthTypeKCItemAttr            = 'atyp';                        {  Authentication Type (KCAuthType)  }
  165.     kPortKCItemAttr                = 'port';                        {  Port (UInt16)  }
  166.     kPathKCItemAttr                = 'path';                        {  Path (Str255)  }
  167.                                                                 {  Unique Appleshare password attributes  }
  168.     kVolumeKCItemAttr            = 'vlme';                        {  Volume (Str63)  }
  169.     kAddressKCItemAttr            = 'addr';                        {  Server address (IP or domain name) or zone name (string)  }
  170.     kSignatureKCItemAttr        = 'ssig';                        {  Server signature block (AFPServerSignature)  }
  171.                                                                 {  Unique AppleShare and Internet attributes  }
  172.     kProtocolKCItemAttr            = 'ptcl';                        {  Protocol (KCProtocolType)  }
  173.                                                                 {  Certificate attributes  }
  174.     kSubjectKCItemAttr            = 'subj';                        {  Subject distinguished name (DER-encoded data)  }
  175.     kCommonNameKCItemAttr        = 'cn  ';                        {  Common Name (UTF8-encoded string)  }
  176.     kIssuerKCItemAttr            = 'issu';                        {  Issuer distinguished name (DER-encoded data)  }
  177.     kSerialNumberKCItemAttr        = 'snbr';                        {  Certificate serial number (DER-encoded data)  }
  178.     kEMailKCItemAttr            = 'mail';                        {  E-mail address (ASCII-encoded string)  }
  179.     kPublicKeyHashKCItemAttr    = 'hpky';                        {  Hash of public key (KCPublicKeyHash), 20 bytes max.  }
  180.     kIssuerURLKCItemAttr        = 'iurl';                        {  URL of the certificate issuer (ASCII-encoded string)  }
  181.                                                                 {  Shared by keys and certificates  }
  182.     kEncryptKCItemAttr            = 'encr';                        {  Encrypt (Boolean)  }
  183.     kDecryptKCItemAttr            = 'decr';                        {  Decrypt (Boolean)  }
  184.     kSignKCItemAttr                = 'sign';                        {  Sign (Boolean)  }
  185.     kVerifyKCItemAttr            = 'veri';                        {  Verify (Boolean)  }
  186.     kWrapKCItemAttr                = 'wrap';                        {  Wrap (Boolean)  }
  187.     kUnwrapKCItemAttr            = 'unwr';                        {  Unwrap (Boolean)  }
  188.     kStartDateKCItemAttr        = 'sdat';                        {  Start Date (UInt32)  }
  189.     kEndDateKCItemAttr            = 'edat';                        {  End Date (UInt32)  }
  190.  
  191.  
  192. TYPE
  193.     KCItemAttr                            = FourCharCode;
  194.     KCAttributePtr = ^KCAttribute;
  195.     KCAttribute = RECORD
  196.         tag:                    KCAttrType;                                {  4-byte attribute tag  }
  197.         length:                    UInt32;                                    {  Length of attribute data  }
  198.         data:                    Ptr;                                    {  Pointer to attribute data  }
  199.     END;
  200.  
  201.     KCAttributeListPtr = ^KCAttributeList;
  202.     KCAttributeList = RECORD
  203.         count:                    UInt32;                                    {  How many attributes in the array  }
  204.         attr:                    KCAttributePtr;                            {  Pointer to first attribute in array  }
  205.     END;
  206.  
  207.  
  208. CONST
  209.     kKCAuthTypeNTLM                = 'ntlm';
  210.     kKCAuthTypeMSN                = 'msna';
  211.     kKCAuthTypeDPA                = 'dpaa';
  212.     kKCAuthTypeRPA                = 'rpaa';
  213.     kKCAuthTypeHTTPDigest        = 'httd';
  214.     kKCAuthTypeDefault            = 'dflt';
  215.  
  216.  
  217. TYPE
  218.     KCAuthType                            = FourCharCode;
  219.  
  220. CONST
  221.     kKCProtocolTypeFTP            = 'ftp ';
  222.     kKCProtocolTypeFTPAccount    = 'ftpa';
  223.     kKCProtocolTypeHTTP            = 'http';
  224.     kKCProtocolTypeIRC            = 'irc ';
  225.     kKCProtocolTypeNNTP            = 'nntp';
  226.     kKCProtocolTypePOP3            = 'pop3';
  227.     kKCProtocolTypeSMTP            = 'smtp';
  228.     kKCProtocolTypeSOCKS        = 'sox ';
  229.     kKCProtocolTypeIMAP            = 'imap';
  230.     kKCProtocolTypeLDAP            = 'ldap';
  231.     kKCProtocolTypeAppleTalk    = 'atlk';
  232.     kKCProtocolTypeAFP            = 'afp ';
  233.     kKCProtocolTypeTelnet        = 'teln';
  234.  
  235.  
  236. TYPE
  237.     KCProtocolType                        = FourCharCode;
  238.  
  239. CONST
  240.     kSecOptionReserved            = $000000FF;                    {  First byte reserved for SecOptions flags  }
  241.     kCertUsageShift                = 8;                            {  start at bit 8  }
  242.     kCertUsageSigningAdd        = $0100;
  243.     kCertUsageSigningAskAndAdd    = $0200;
  244.     kCertUsageVerifyAdd            = $0400;
  245.     kCertUsageVerifyAskAndAdd    = $0800;
  246.     kCertUsageEncryptAdd        = $1000;
  247.     kCertUsageEncryptAskAndAdd    = $2000;
  248.     kCertUsageDecryptAdd        = $4000;
  249.     kCertUsageDecryptAskAndAdd    = $8000;
  250.     kCertUsageKeyExchAdd        = $00010000;
  251.     kCertUsageKeyExchAskAndAdd    = $00020000;
  252.     kCertUsageRootAdd            = $00040000;
  253.     kCertUsageRootAskAndAdd        = $00080000;
  254.     kCertUsageSSLAdd            = $00100000;
  255.     kCertUsageSSLAskAndAdd        = $00200000;
  256.     kCertUsageAllAdd            = $7FFFFF00;
  257.  
  258.  
  259. TYPE
  260.     KCCertAddOptions                    = UInt32;
  261.  
  262. CONST
  263.     kPolicyKCStopOn                = 0;
  264.     kNoneKCStopOn                = 1;
  265.     kFirstPassKCStopOn            = 2;
  266.     kFirstFailKCStopOn            = 3;
  267.  
  268.  
  269. TYPE
  270.     KCVerifyStopOn                        = UInt16;
  271.  
  272. CONST
  273.     kCertSearchShift            = 0;                            {  start at bit 0  }
  274.     kCertSearchSigningIgnored    = 0;
  275.     kCertSearchSigningAllowed    = $01;
  276.     kCertSearchSigningDisallowed = $02;
  277.     kCertSearchSigningMask        = $03;
  278.     kCertSearchVerifyIgnored    = 0;
  279.     kCertSearchVerifyAllowed    = $04;
  280.     kCertSearchVerifyDisallowed    = $08;
  281.     kCertSearchVerifyMask        = $0C;
  282.     kCertSearchEncryptIgnored    = 0;
  283.     kCertSearchEncryptAllowed    = $10;
  284.     kCertSearchEncryptDisallowed = $20;
  285.     kCertSearchEncryptMask        = $30;
  286.     kCertSearchDecryptIgnored    = 0;
  287.     kCertSearchDecryptAllowed    = $40;
  288.     kCertSearchDecryptDisallowed = $80;
  289.     kCertSearchDecryptMask        = $C0;
  290.     kCertSearchWrapIgnored        = 0;
  291.     kCertSearchWrapAllowed        = $0100;
  292.     kCertSearchWrapDisallowed    = $0200;
  293.     kCertSearchWrapMask            = $0300;
  294.     kCertSearchUnwrapIgnored    = 0;
  295.     kCertSearchUnwrapAllowed    = $0400;
  296.     kCertSearchUnwrapDisallowed    = $0800;
  297.     kCertSearchUnwrapMask        = $0C00;
  298.     kCertSearchPrivKeyRequired    = $1000;
  299.     kCertSearchAny                = 0;
  300.  
  301.  
  302. TYPE
  303.     KCCertSearchOptions                    = UInt32;
  304. { Other constants }
  305. { Opening and getting information about the Keychain Manager }
  306. FUNCTION KCGetKeychainManagerVersion(VAR returnVers: UInt32): OSStatus;
  307. {$IFC TARGET_RT_MAC_CFM }
  308. {
  309.         KeychainManagerAvailable() is a macro/inline available only in C/C++.  
  310.         To get the same functionality from pascal or assembly, you need
  311.         to test if KCGetKeychainManagerVersion function is not NULL.  For instance:
  312.         
  313.             gKeychainManagerAvailable = FALSE;
  314.             IF @KCGetKeychainManagerVersion <> kUnresolvedCFragSymbolAddress THEN
  315.                 gKeychainManagerAvailable = TRUE;
  316.             END
  317.     
  318.     }
  319. {$ELSEC}
  320. FUNCTION KeychainManagerAvailable: BOOLEAN;
  321. {$ENDC}  {TARGET_RT_MAC_CFM}
  322.  
  323. { Creating references to keychains }
  324. FUNCTION KCMakeKCRefFromFSSpec(VAR keychainFSSpec: FSSpec; VAR keychain: KCRef): OSStatus;
  325. FUNCTION KCMakeKCRefFromAlias(keychainAlias: AliasHandle; VAR keychain: KCRef): OSStatus;
  326. FUNCTION KCMakeAliasFromKCRef(keychain: KCRef; VAR keychainAlias: AliasHandle): OSStatus;
  327. FUNCTION KCReleaseKeychain(VAR keychain: KCRef): OSStatus;
  328. { Locking and unlocking a keychain }
  329. FUNCTION KCUnlock(keychain: KCRef; password: StringPtr): OSStatus;
  330. FUNCTION KCLock(keychain: KCRef): OSStatus;
  331. { Specifying the default keychain }
  332. FUNCTION KCGetDefaultKeychain(VAR keychain: KCRef): OSStatus;
  333. FUNCTION KCSetDefaultKeychain(keychain: KCRef): OSStatus;
  334. { Creating a new keychain }
  335. FUNCTION KCCreateKeychain(password: StringPtr; VAR keychain: KCRef): OSStatus;
  336. { Getting information about a keychain }
  337. FUNCTION KCGetStatus(keychain: KCRef; VAR keychainStatus: UInt32): OSStatus;
  338. FUNCTION KCGetKeychain(item: KCItemRef; VAR keychain: KCRef): OSStatus;
  339. FUNCTION KCGetKeychainName(keychain: KCRef; keychainName: StringPtr): OSStatus;
  340. FUNCTION KCChangeSettings(keychain: KCRef): OSStatus;
  341. { Enumerating available keychains }
  342. FUNCTION KCCountKeychains: UInt16;
  343. FUNCTION KCGetIndKeychain(index: UInt16; VAR keychain: KCRef): OSStatus;
  344.  
  345. TYPE
  346. {$IFC TYPED_FUNCTION_POINTERS}
  347.     KCCallbackProcPtr = FUNCTION(keychainEvent: KCEvent; VAR info: KCCallbackInfo; userContext: UNIV Ptr): OSStatus;
  348. {$ELSEC}
  349.     KCCallbackProcPtr = ProcPtr;
  350. {$ENDC}
  351.  
  352.     KCCallbackUPP = UniversalProcPtr;
  353.  
  354. CONST
  355.     uppKCCallbackProcInfo = $00000FB0;
  356.  
  357. FUNCTION NewKCCallbackUPP(userRoutine: KCCallbackProcPtr): KCCallbackUPP; { old name was NewKCCallbackProc }
  358.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  359.     INLINE $2E9F;
  360.     {$ENDC}
  361.  
  362. PROCEDURE DisposeKCCallbackUPP(userUPP: KCCallbackUPP);
  363.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  364.     INLINE $594F;
  365.     {$ENDC}
  366.  
  367. FUNCTION InvokeKCCallbackUPP(keychainEvent: KCEvent; VAR info: KCCallbackInfo; userContext: UNIV Ptr; userRoutine: KCCallbackUPP): OSStatus; { old name was CallKCCallbackProc }
  368.     {$IFC TARGET_OS_MAC AND TARGET_CPU_68K AND NOT TARGET_RT_MAC_CFM}
  369.     INLINE $205F, $4E90;
  370.     {$ENDC}
  371. { Keychain Manager callbacks }
  372. FUNCTION KCAddCallback(callbackProc: KCCallbackUPP; eventMask: KCEventMask; userContext: UNIV Ptr): OSStatus;
  373. FUNCTION KCRemoveCallback(callbackProc: KCCallbackUPP): OSStatus;
  374. { Managing the Human Interface }
  375. FUNCTION KCSetInteractionAllowed(state: BOOLEAN): OSStatus;
  376. FUNCTION KCIsInteractionAllowed: BOOLEAN;
  377. { Storing and retrieving AppleShare passwords }
  378. FUNCTION KCAddAppleSharePassword(VAR serverSignature: AFPServerSignature; serverAddress: StringPtr; serverName: StringPtr; volumeName: StringPtr; accountName: StringPtr; passwordLength: UInt32; passwordData: UNIV Ptr; VAR item: KCItemRef): OSStatus;
  379. FUNCTION KCFindAppleSharePassword(VAR serverSignature: AFPServerSignature; serverAddress: StringPtr; serverName: StringPtr; volumeName: StringPtr; accountName: StringPtr; maxLength: UInt32; passwordData: UNIV Ptr; VAR actualLength: UInt32; VAR item: KCItemRef): OSStatus;
  380. { Storing and retrieving Internet passwords }
  381. FUNCTION KCAddInternetPassword(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; port: UInt16; protocol: OSType; authType: OSType; passwordLength: UInt32; passwordData: UNIV Ptr; VAR item: KCItemRef): OSStatus;
  382. FUNCTION KCAddInternetPasswordWithPath(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; path: StringPtr; port: UInt16; protocol: OSType; authType: OSType; passwordLength: UInt32; passwordData: UNIV Ptr; VAR item: KCItemRef): OSStatus;
  383. FUNCTION KCFindInternetPassword(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; port: UInt16; protocol: OSType; authType: OSType; maxLength: UInt32; passwordData: UNIV Ptr; VAR actualLength: UInt32; VAR item: KCItemRef): OSStatus;
  384. FUNCTION KCFindInternetPasswordWithPath(serverName: StringPtr; securityDomain: StringPtr; accountName: StringPtr; path: StringPtr; port: UInt16; protocol: OSType; authType: OSType; maxLength: UInt32; passwordData: UNIV Ptr; VAR actualLength: UInt32; VAR item: KCItemRef): OSStatus;
  385. { Storing and retrieving other types of passwords }
  386. FUNCTION KCAddGenericPassword(serviceName: StringPtr; accountName: StringPtr; passwordLength: UInt32; passwordData: UNIV Ptr; VAR item: KCItemRef): OSStatus;
  387. FUNCTION KCFindGenericPassword(serviceName: StringPtr; accountName: StringPtr; maxLength: UInt32; passwordData: UNIV Ptr; VAR actualLength: UInt32; VAR item: KCItemRef): OSStatus;
  388. { Creating and editing a keychain item }
  389. FUNCTION KCNewItem(itemClass: KCItemClass; itemCreator: OSType; length: UInt32; data: UNIV Ptr; VAR item: KCItemRef): OSStatus;
  390. FUNCTION KCSetAttribute(item: KCItemRef; VAR attr: KCAttribute): OSStatus;
  391. FUNCTION KCGetAttribute(item: KCItemRef; VAR attr: KCAttribute; VAR actualLength: UInt32): OSStatus;
  392. FUNCTION KCSetData(item: KCItemRef; length: UInt32; data: UNIV Ptr): OSStatus;
  393. FUNCTION KCGetData(item: KCItemRef; maxLength: UInt32; data: UNIV Ptr; VAR actualLength: UInt32): OSStatus;
  394. { Managing keychain items }
  395. FUNCTION KCAddItem(item: KCItemRef): OSStatus;
  396. FUNCTION KCDeleteItem(item: KCItemRef): OSStatus;
  397. FUNCTION KCUpdateItem(item: KCItemRef): OSStatus;
  398. FUNCTION KCReleaseItem(VAR item: KCItemRef): OSStatus;
  399. FUNCTION KCCopyItem(item: KCItemRef; destKeychain: KCRef; VAR copy: KCItemRef): OSStatus;
  400. { Searching and enumerating keychain items }
  401. FUNCTION KCFindFirstItem(keychain: KCRef; {CONST}VAR attrList: KCAttributeList; VAR search: KCSearchRef; VAR item: KCItemRef): OSStatus;
  402. FUNCTION KCFindNextItem(search: KCSearchRef; VAR item: KCItemRef): OSStatus;
  403. FUNCTION KCReleaseSearch(VAR search: KCSearchRef): OSStatus;
  404. { Working with certificates }
  405. FUNCTION KCFindX509Certificates(keychain: KCRef; name: CFStringRef; emailAddress: CFStringRef; options: KCCertSearchOptions; VAR certificateItems: CFMutableArrayRef): OSStatus;
  406. FUNCTION KCChooseCertificate(items: CFArrayRef; VAR certificate: KCItemRef; policyOIDs: CFArrayRef; stopOn: KCVerifyStopOn): OSStatus;
  407. { Keychain Manager error codes }
  408.  
  409. CONST
  410.     errKCNotAvailable            = -25291;
  411.     errKCReadOnly                = -25292;
  412.     errKCAuthFailed                = -25293;
  413.     errKCNoSuchKeychain            = -25294;
  414.     errKCInvalidKeychain        = -25295;
  415.     errKCDuplicateKeychain        = -25296;
  416.     errKCDuplicateCallback        = -25297;
  417.     errKCInvalidCallback        = -25298;
  418.     errKCDuplicateItem            = -25299;
  419.     errKCItemNotFound            = -25300;
  420.     errKCBufferTooSmall            = -25301;
  421.     errKCDataTooLarge            = -25302;
  422.     errKCNoSuchAttr                = -25303;
  423.     errKCInvalidItemRef            = -25304;
  424.     errKCInvalidSearchRef        = -25305;
  425.     errKCNoSuchClass            = -25306;
  426.     errKCNoDefaultKeychain        = -25307;
  427.     errKCInteractionNotAllowed    = -25308;
  428.     errKCReadOnlyAttr            = -25309;
  429.     errKCWrongKCVersion            = -25310;
  430.     errKCKeySizeNotAllowed        = -25311;
  431.     errKCNoStorageModule        = -25312;
  432.     errKCNoCertificateModule    = -25313;
  433.     errKCNoPolicyModule            = -25314;
  434.     errKCInteractionRequired    = -25315;
  435.     errKCDataNotAvailable        = -25316;
  436.     errKCDataNotModifiable        = -25317;
  437.     errKCCreateChainFailed        = -25318;
  438.  
  439.  
  440. {$ALIGN RESET}
  441. {$POP}
  442.  
  443. {$SETC UsingIncludes := KeychainIncludes}
  444.  
  445. {$ENDC} {__KEYCHAIN__}
  446.  
  447. {$IFC NOT UsingIncludes}
  448.  END.
  449. {$ENDC}
  450.